package com.likou;

public class q24 {


    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }


//    // 递归
//    public ListNode swapPairs(ListNode head) {
//        if (head == null || head.next == null) {
//            return head;
//        }
//        ListNode newHead = head.next;
//        head.next = swapPairs(newHead.next);
//        newHead.next = head;
//        return newHead;
//    }


    // 迭代
    public ListNode swapPairs(ListNode head) {
        ListNode newNode = new ListNode(0, head);
        ListNode pre = newNode;
        ListNode first = head;
        ListNode second = null;
        while (first != null && first.next != null) {
            second = first.next;
            ListNode next = second.next;

            second.next = first;
            pre.next = second;
            first.next = next;

            pre = first;
            first = next;
        }

        return newNode.next;
    }


//    public ListNode swapPairs(ListNode head) {
//        if (head == null || head.next == null) {
//            return head;
//        }
//
//        ListNode p1 = head;
//        ListNode p2 = head.next;
//
//        while (p2 != null) {
//            int temp = p1.val;
//            p1.val = p2.val;
//            p2.val = temp;
//            if (p2.next != null) {
//                p1 = p1.next.next;
//                p2 = p2.next.next;
//            }
//        }
//
//        return head;
//    }
}
